home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr48 / vdl020d.zip / VSAL.DOC < prev    next >
Text File  |  1993-04-14  |  14KB  |  631 lines

  1. {
  2.  ════════════════════════════════════════════════════════════════════════════
  3.  
  4.  Visionix SCSI Abstraction Library (VSAL)
  5.  Copyright 1991,92,93 Visionix
  6.  ALL RIGHTS RESERVED
  7.  
  8.  ────────────────────────────────────────────────────────────────────────────
  9.  
  10.  Revision history in reverse chronological order:
  11.  
  12.  Initials  Date      Comment
  13.  ────────  ────────  ────────────────────────────────────────────────────────
  14.  
  15.  lpg       03/16/93  Added Source Documentation
  16.  
  17.  mep       02/11/93  Cleaned up code for beta release
  18.  
  19.  jrt       02/08/93  Sync with beta 0.12 release
  20.  
  21.  jrt       11/21/92  Sync with beta 0.0.8
  22.  
  23.  jrt       09/01/92  First logged revision.
  24.  
  25.  ════════════════════════════════════════════════════════════════════════════
  26. }
  27.  
  28. Unit VSAL;
  29.  
  30.  
  31. Uses
  32.  
  33.   DOS,
  34.   VTypes,
  35.   VGen,
  36.   ASPILow,
  37.   HM;
  38.  
  39. {────────────────────────────────────────────────────────────────────────────}
  40.  
  41. Const
  42.  
  43.   cSalMethodHACMAN = 1;
  44.   cSalMethodASPI   = 2;
  45.   cSalMethodSDLP   = 3;
  46.   cSalMethodCAM    = 4;
  47.   CSalMethodINT4B  = 5;
  48.  
  49.   cSalMethodSySUI  = 14;
  50.  
  51.   cSalGetPaddedName  = 1;
  52.  
  53.   cSalDevNameIncType = 1;
  54.   cSalDevNameIncInq  = 2;
  55.  
  56.   cSalDevNameIncAll  = 3;
  57.  
  58.   sSalDone    = $0000;
  59.  
  60.   sSalGenFail = $FFFF;
  61.  
  62.  
  63. (*
  64.  
  65.   0 ----- 0=NO I/O; 1=read, 2=write, 3=Target driven
  66.   1 ---/
  67.   2
  68.   3
  69.   4
  70.   5
  71.   6
  72.   7
  73.   8
  74.   9
  75.   10
  76.   11
  77.   12
  78.   13
  79.   14
  80.   15
  81.  
  82. *)
  83.  
  84.   cSalxsNoIO     = $0000;
  85.   cSalxsRead     = $0001;
  86.   cSalxsWrite    = $0002;
  87.   cSalxsTDIO     = $0003;
  88.  
  89.   sSalxsOK       = $0100;
  90.   sSalxsCheckDev = $0200;
  91.   sSalxsBadIODir = $0300;
  92.   sSalxsBadIOtmd = $0400;
  93.   sSalxsBadIOhmd = $0500;
  94.   sSalxsBadIOtld = $0600;
  95.   sSalxsBadIOhld = $0700;
  96.  
  97.   sSalxsGenFail  = $FF00;
  98.  
  99. Type
  100.  
  101.   TCDB    = Array[1..16] of BYTE;
  102.  
  103.   TError  = WORD;
  104.  
  105.   TBusMapEntry = RECORD
  106.  
  107.     Method    : BYTE;
  108.     MainBus   : BYTE;
  109.     SubBus    : BYTE;
  110.  
  111.   END;
  112.  
  113.   TSalInstance = RECORD
  114.  
  115.     Method    : WORD;
  116.  
  117.     NumBus    : BYTE;
  118.  
  119.     BusMap    : Array[0..15] of TBusMapEntry;
  120.  
  121.   END;
  122.  
  123.   PSalInstance = ^TSalInstance;
  124.  
  125.   TSalHandle = PSalInstance;
  126.  
  127.   {------------------}
  128.   { SAl General Caps }
  129.   {------------------}
  130.  
  131.   TSalCaps = RECORD
  132.  
  133.     a           : BYTE;
  134.  
  135.   END;
  136.  
  137.   PSalCaps = ^TSalCaps;
  138.  
  139.   {------------------------}
  140.   { Method specific   caps }
  141.   {------------------------}
  142.  
  143.   TSalMethodCaps = RECORD
  144.  
  145.     b           : BYTE;
  146.  
  147.   END;
  148.  
  149.   PSalMethodCaps = ^TSalMethodCaps;
  150.  
  151. {────────────────────────────────────────────────────────────────────────────}
  152.  
  153. {----------------------}
  154. { Init and informative }
  155. {----------------------}
  156.  
  157. Procedure SAL_GetCaps(            SalCaps        : PSalCaps  );
  158.  
  159. Function  SAL_CheckForMethod(     Method         : BYTE      ) : BOOLEAN;
  160.  
  161. Function  SAL_Open(               Flags          : BYTE;
  162.                                   MethodListStr  : STRING   ) :TSalHandle;
  163.  
  164. Procedure SAL_Close(              Handle         : TSalHandle );
  165.  
  166. Procedure SAL_GetMethodCaps(      Handle         : TSalHandle;
  167.                                   SalMethodCaps  : PSalMethodCaps );
  168.  
  169. Function  SAL_GetNumBus(          Handle         : TSalHandle ) :BYTE;
  170.  
  171. {--------------------}
  172. { SAL ASCII Name Get }
  173. {--------------------}
  174.  
  175. Function  SAL_GetMethodName(      Handle         : TSalHandle;
  176.                                   Flags          : WORD        ):ST80;
  177.  
  178. Function  SAL_GetBusName(         Handle         : TSalHandle;
  179.                                   Flags          : WORD;
  180.                                   Bus            : BYTE    ) :ST80;
  181.  
  182. Function  SAL_GetDevName(         Handle         : TSalHandle;
  183.                                   Flags          : WORD;
  184.                                   Bus            : BYTE;
  185.                                   Target         : BYTE;
  186.                                   Lun            : BYTE    ) :ST80;
  187.  
  188. {--------------}
  189. { SAL SCSI I/O }
  190. {--------------}
  191.  
  192. Function  SAL_ExecSCSI(           Handle         : TSalHandle;
  193.                                   Flags          : WORD;
  194.                                   Bus            : BYTE;
  195.                                   Target         : BYTE;
  196.                                   Lun            : BYTE;
  197.                                   CDBSize        : BYTE;
  198.                                   CDB            : PCDB;
  199.                                   IOSize         : LONGINT;
  200.                                   IOBuff         : POINTER;
  201.                                   ReqSenSize     : LONGINT;
  202.                                   ReqSenBuff     : POINTER  ) :TError;
  203.  
  204. (*
  205. Function  SAL_PostSCSI(           Handle         : TSalHandle;
  206.                                   Flags          : WORD;
  207.                                   Bus            : BYTE;
  208.                                   Target         : BYTE;
  209.                                   Lun            : BYTE;
  210.                                   CDBSize        : BYTE;
  211.                                   CDB            : PCDB;
  212.                                   IOSize         : LONGINT;
  213.                                   IOBuff         : POINTER;
  214.                                   ReqSenSize     : LONGINT;
  215.                                   ReqSenBuff     : POINTER;
  216.                                   PostProc       : POINTER  ) :TError;
  217. *)
  218.  
  219. Function  SAL_ResetSCSIBus(       Handle         : TSalHandle;
  220.                                   Flags          : WORD;
  221.                                   Bus            : BYTE    ) :TError;
  222.  
  223. Function  SAL_ResetSCSIDev(       Handle         : TSalHandle;
  224.                                   Flags          : WORD;
  225.                                   Bus            : BYTE    ) :TError;
  226.  
  227. {-----------------}
  228. { SAL CDB Loading }
  229. {-----------------}
  230.  
  231. Procedure SAL_CDB6Load(             CDB         : PCDB;
  232.                                     b1          : BYTE;
  233.                                     b2          : BYTE;
  234.                                     b3          : BYTE;
  235.                                     b4          : BYTE;
  236.                                     b5          : BYTE;
  237.                                     b6          : BYTE          );
  238.  
  239. Procedure SAL_CDB10Load(            CDB         : PCDB;
  240.                                     b1          : BYTE;
  241.                                     b2          : BYTE;
  242.                                     b3          : BYTE;
  243.                                     b4          : BYTE;
  244.                                     b5          : BYTE;
  245.                                     b6          : BYTE;
  246.                                     b7          : BYTE;
  247.                                     b8          : BYTE;
  248.                                     b9          : BYTE;
  249.                                     b10         : BYTE          );
  250.  
  251. {────────────────────────────────────────────────────────────────────────────}
  252.  
  253.  
  254. ──────────────────────────────────────────────────────────────────────────────
  255.  
  256.  
  257. [FUNCTION]
  258.  
  259. Procedure SAL_GetCaps(            SalCaps        : PSalCaps  );
  260.  
  261. [PARAMETERS]
  262.  
  263. SalCaps     Pointer to ?
  264.  
  265. [RETURNS]
  266.  
  267. (None)
  268.  
  269. [DESCRIPTION]
  270.  
  271. [SEE-ALSO]
  272.  
  273. [EXAMPLE]
  274.  
  275.  
  276. ──────────────────────────────────────────────────────────────────────────────
  277.  
  278.  
  279. [FUNCTION]
  280.  
  281. Function  SAL_CheckForMethod(     Method         : BYTE      ) : BOOLEAN;
  282.  
  283. [PARAMETERS]
  284.  
  285. Method      ?
  286.  
  287. [RETURNS]
  288.  
  289. Whether the Method was ...
  290.  
  291. [DESCRIPTION]
  292.  
  293. [SEE-ALSO]
  294.  
  295. [EXAMPLE]
  296.  
  297.  
  298. ──────────────────────────────────────────────────────────────────────────────
  299.  
  300.  
  301. [FUNCTION]
  302.  
  303. Function  SAL_Open(               Flags          : BYTE;
  304.                                   MethodListStr  : STRING   ) :TSalHandle;
  305.  
  306. [PARAMETERS]
  307.  
  308. Flags         ?
  309. MethodListStr ?
  310.  
  311. [RETURNS]
  312.  
  313. [DESCRIPTION]
  314.  
  315. [SEE-ALSO]
  316.  
  317. [EXAMPLE]
  318.  
  319.  
  320. ──────────────────────────────────────────────────────────────────────────────
  321.  
  322.  
  323. [FUNCTION]
  324.  
  325. Procedure SAL_Close(              Handle         : TSalHandle );
  326.  
  327. [PARAMETERS]
  328.  
  329. Handle      ?
  330.  
  331. [RETURNS]
  332.  
  333. (None)
  334.  
  335. [DESCRIPTION]
  336.  
  337. [SEE-ALSO]
  338.  
  339. [EXAMPLE]
  340.  
  341.  
  342. ──────────────────────────────────────────────────────────────────────────────
  343.  
  344.  
  345. [FUNCTION]
  346.  
  347. Procedure SAL_GetMethodCaps(      Handle         : TSalHandle;
  348.                                   SalMethodCaps  : PSalMethodCaps );
  349.  
  350. [PARAMETERS]
  351.  
  352. Handle        ?
  353. SalMethodCaps Pointer to ?
  354.  
  355. [RETURNS]
  356.  
  357. (None)
  358.  
  359. [DESCRIPTION]
  360.  
  361. [SEE-ALSO]
  362.  
  363. [EXAMPLE]
  364.  
  365.  
  366. ──────────────────────────────────────────────────────────────────────────────
  367.  
  368.  
  369. [FUNCTION]
  370.  
  371. Function  SAL_GetNumBus(          Handle         : TSalHandle ) :BYTE;
  372.  
  373. [PARAMETERS]
  374.  
  375. Handle      ?
  376.  
  377. [RETURNS]
  378.  
  379. [DESCRIPTION]
  380.  
  381. [SEE-ALSO]
  382.  
  383. [EXAMPLE]
  384.  
  385.  
  386. ──────────────────────────────────────────────────────────────────────────────
  387.  
  388.  
  389. [FUNCTION]
  390.  
  391. Function  SAL_GetMethodName(      Handle         : TSalHandle;
  392.                                   Flags          : WORD        ):ST80;
  393.  
  394. [PARAMETERS]
  395.  
  396. Handle      ?
  397. Flags       ?
  398.  
  399. [RETURNS]
  400.  
  401. [DESCRIPTION]
  402.  
  403. [SEE-ALSO]
  404.  
  405. [EXAMPLE]
  406.  
  407.  
  408. ──────────────────────────────────────────────────────────────────────────────
  409.  
  410.  
  411. [FUNCTION]
  412.  
  413. Function  SAL_GetBusName(         Handle         : TSalHandle;
  414.                                   Flags          : WORD;
  415.                                   Bus            : BYTE    ) :ST80;
  416.  
  417. [PARAMETERS]
  418.  
  419. Handle      ?
  420. Flags       ?
  421. Bus         ?
  422.  
  423. [RETURNS]
  424.  
  425. [DESCRIPTION]
  426.  
  427. [SEE-ALSO]
  428.  
  429. [EXAMPLE]
  430.  
  431.  
  432. ──────────────────────────────────────────────────────────────────────────────
  433.  
  434.  
  435. [FUNCTION]
  436.  
  437. Function  SAL_GetDevName(         Handle         : TSalHandle;
  438.                                   Flags          : WORD;
  439.                                   Bus            : BYTE;
  440.                                   Target         : BYTE;
  441.                                   Lun            : BYTE    ) :ST80;
  442.  
  443. [PARAMETERS]
  444.  
  445. Handle      ?
  446. Flags       ?
  447. Bus         ?
  448. Target      ?
  449. Lun         ?
  450.  
  451. [RETURNS]
  452.  
  453. [DESCRIPTION]
  454.  
  455. [SEE-ALSO]
  456.  
  457. [EXAMPLE]
  458.  
  459.  
  460. ──────────────────────────────────────────────────────────────────────────────
  461.  
  462.  
  463. [FUNCTION]
  464.  
  465. Function  SAL_ExecSCSI(           Handle         : TSalHandle;
  466.                                   Flags          : WORD;
  467.                                   Bus            : BYTE;
  468.                                   Target         : BYTE;
  469.                                   Lun            : BYTE;
  470.                                   CDBSize        : BYTE;
  471.                                   CDB            : PCDB;
  472.                                   IOSize         : LONGINT;
  473.                                   IOBuff         : POINTER;
  474.                                   ReqSenSize     : LONGINT;
  475.                                   ReqSenBuff     : POINTER  ) :TError;
  476.  
  477. [PARAMETERS]
  478.  
  479. Handle      ?
  480. Flags       ?
  481. Bus         Device Host Adapter Number
  482. Target      Device Target ID
  483. Lun         Device Logical Unit Number
  484. CDBSize     Number of Bytes in CDB
  485. CDB         Pointer to CDB Data
  486. IOSize      Number of Bytes to IO
  487. IOBuff      Pointer to IO Data Buffer
  488. ReqSenSize  Size of Request Sense Buffer
  489. ReqSenBuff  Pointer to Request Sense Buffer
  490.  
  491. [RETURNS]
  492.  
  493. [DESCRIPTION]
  494.  
  495. [SEE-ALSO]
  496.  
  497. [EXAMPLE]
  498.  
  499.  
  500. ──────────────────────────────────────────────────────────────────────────────
  501.  
  502.  
  503. [FUNCTION]
  504.  
  505. Function  SAL_ResetSCSIBus(       Handle         : TSalHandle;
  506.                                   Flags          : WORD;
  507.                                   Bus            : BYTE    ) :TError;
  508.  
  509. [PARAMETERS]
  510.  
  511. Handle      ?
  512. Flags       ?
  513. Bus         ?
  514.  
  515. [RETURNS]
  516.  
  517. [DESCRIPTION]
  518.  
  519. [SEE-ALSO]
  520.  
  521. [EXAMPLE]
  522.  
  523.  
  524. ──────────────────────────────────────────────────────────────────────────────
  525.  
  526.  
  527. [FUNCTION]
  528.  
  529. Function  SAL_ResetSCSIDev(       Handle         : TSalHandle;
  530.                                   Flags          : WORD;
  531.                                   Bus            : BYTE    ) :TError;
  532.  
  533. [PARAMETERS]
  534.  
  535. Handle      ?
  536. Flags       ?
  537. Bug         ?
  538.  
  539. [RETURNS]
  540.  
  541. [DESCRIPTION]
  542.  
  543. [SEE-ALSO]
  544.  
  545. [EXAMPLE]
  546.  
  547.  
  548. ──────────────────────────────────────────────────────────────────────────────
  549.  
  550.  
  551. [FUNCTION]
  552.  
  553. Procedure SAL_CDB6Load(             CDB         : PCDB;
  554.                                     b1          : BYTE;
  555.                                     b2          : BYTE;
  556.                                     b3          : BYTE;
  557.                                     b4          : BYTE;
  558.                                     b5          : BYTE;
  559.                                     b6          : BYTE          );
  560.  
  561. [PARAMETERS]
  562.  
  563. CDB         Pointer to CDB Array
  564. b1          1st CDB Byte
  565. b2          2nd CDB Byte
  566. b3          3rd CDB Byte
  567. b4          4th CDB Byte
  568. b5          5th CDB Byte
  569. b6          6th CDB Byte
  570.  
  571. [RETURNS]
  572.  
  573. (None)
  574.  
  575. [DESCRIPTION]
  576.  
  577. Loads the CDB with the Parameter Bytes.
  578.  
  579. [SEE-ALSO]
  580.  
  581. SAL_CDB10Load
  582.  
  583. [EXAMPLE]
  584.  
  585.  
  586. ──────────────────────────────────────────────────────────────────────────────
  587.  
  588.  
  589. [FUNCTION]
  590.  
  591. Procedure SAL_CDB10Load(            CDB         : PCDB;
  592.                                     b1          : BYTE;
  593.                                     b2          : BYTE;
  594.                                     b3          : BYTE;
  595.                                     b4          : BYTE;
  596.                                     b5          : BYTE;
  597.                                     b6          : BYTE;
  598.                                     b7          : BYTE;
  599.                                     b8          : BYTE;
  600.                                     b9          : BYTE;
  601.                                     b10         : BYTE          );
  602.  
  603. [PARAMETERS]
  604.  
  605. CDB         Pointer to CDB Array
  606. b1          1st CDB Byte
  607. b2          2nd CDB Byte
  608. b3          3rd CDB Byte
  609. b4          4th CDB Byte
  610. b5          5th CDB Byte
  611. b6          6th CDB Byte
  612. b7          7th CDB Byte
  613. b8          8th CDB Byte
  614. b9          9th CDB Byte
  615. b10         10th CDB Byte
  616.  
  617. [RETURNS]
  618.  
  619. (None)
  620.  
  621. [DESCRIPTION]
  622.  
  623. Loads the CDB with the Parameter Bytes.
  624.  
  625. [SEE-ALSO]
  626.  
  627. SAL_CDB6Load
  628.  
  629. [EXAMPLE]
  630.  
  631.